package aer.MatricesTriangulares;

public class MatricesTriangularesAlt {
	private static int filas, i, j, temp;
	private static boolean arriba, abajo;

	public static void main(String[] args) throws Exception {

		while (true) {
			filas = readInt();
			if (filas == 0) {
				break;
			} else {
				metodo();
			}
		}

	}

	private static void metodo() throws Exception {
		arriba = true;
		abajo = true;

		for (i = 0; i < filas; i++) {
			for (j = 0; j < filas; j++) {
				temp = readInt();
				if (temp != 0) {
					if (arriba) {
						comprobarArriba();
					}
					if (abajo) {
						comprobarAbajo();
					}
				}
			}
		}

		if (arriba || abajo) {
			System.out.print("SI\n");
		} else {
			System.out.print("NO\n");
		}

	}

	private static void comprobarAbajo() {

		if (i >= 1 && i < filas) {
			if (j >= 0 && j < i) {
				abajo = false;
			}
		}

	}

	private static void comprobarArriba() {

		if (i >= 0 && i < (filas - 1)) {
			if (j > i && j <= (filas - 1)) {
				arriba = false;
			}
		}

	}

	private static char x;
	private static StringBuilder sb = new StringBuilder("");

	private static int readInt() throws Exception {
		sb.delete(0, (sb.length()));
		do {
			x = (char) System.in.read();
			if (x != ' ' && x != '\n' && x != '\r') {
				sb.append(x);
			}
		} while (x != ' ' && x != '\n');

		return Integer.parseInt(sb.toString());
	}

}
